package com.example.bootdemo;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.Collections;
import java.util.Scanner;

public class CodeGenerator2 {

    public static void main(String[] args) {
        // 1. 输入相关配置（可替换为配置文件读取）
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入模块名：");
        String moduleName = scanner.nextLine();

        System.out.print("请输入要生成的表名，多个英文逗号分隔：");
        String tables = scanner.nextLine();

        // 数据库配置
        String url = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC";
        String username = "root";
        String password = "123456";

        // 2. 启动生成器
        FastAutoGenerator.create(url, username, password)

                // ========== 全局配置 ==========
                .globalConfig(builder -> builder
                        .author("liangben")  // 作者名
                        .outputDir(System.getProperty("user.dir") + "/boot-demo/src/main/java")  // 输出路径
                        .disableOpenDir()    // 禁止自动打开生成目录
                        .commentDate("yyyy-MM-dd")
                )

                // ========== 包配置 ==========
                .packageConfig(builder -> builder
                        .parent("com.example.bootdemo")
                        .moduleName(moduleName)
                        .entity("entity")
                        .service("service")
                        .serviceImpl("service.impl")
                        .mapper("mapper")
                        .xml("mapper.xml")
                        .controller("controller")
                        .pathInfo(Collections.singletonMap(OutputFile.mapperXml,
                                System.getProperty("user.dir") + "/boot-demo/src/main/resources/mapper/" + moduleName))
                )

                // ========== 策略配置 ==========
                .strategyConfig(builder -> builder
                        // 生成表配置
                        .addInclude(tables.split(","))
                        .addTablePrefix("t_") // 去除表名前缀

                        // 实体策略
                        .entityBuilder()
                        .enableLombok()
                        .enableChainModel()
                        .idType(IdType.AUTO)
                        .naming(NamingStrategy.underline_to_camel)
                        .columnNaming(NamingStrategy.underline_to_camel)
                        .enableTableFieldAnnotation()  // 添加 @TableField 等注解

                        // Mapper 策略
                        .mapperBuilder()
                        .enableBaseResultMap()
                        .enableBaseColumnList()
                        .formatMapperFileName("%sMapper")
                        .formatXmlFileName("%sMapper")

                        // Service 策略
                        .serviceBuilder()
                        .formatServiceFileName("%sService")
                        .formatServiceImplFileName("%sServiceImpl")

                        // Controller 策略
                        .controllerBuilder()
                        .enableRestStyle()
                        .formatFileName("%sController")
                )
//                // 模板引擎 + 自定义模板
//                .templateConfig(builder -> builder
//                                .controller("/custom_controller.java")
//                        // 其他模板可在此继续扩展
//                )

                // ========== 模板引擎 ==========
                .templateEngine(new FreemarkerTemplateEngine()) // 也可以改为 VelocityTemplateEngine()
                .execute();
    }
}
